package com.wms.ymcc.util;


import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;

import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/**--------------------------------------------------------
Http工具类

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.4</version>
</dependency>

<dependency>
    <groupId>commons-httpclient</groupId>
    <artifactId>commons-httpclient</artifactId>
    <version>3.1</version>
</dependency>
--------------------------------------------------------**/
/**
 * Http工具类,用于获取https网址的数据
 */
public class HttpUtil {

    /**
     * 发送POST请求
     * 示例用法：
     * Map<String, String> map = new HashMap<>();
     * map.put("Uid", "xxx");
     * map.put("Key", "xxxxx");
     *
     * @param url    请求的目标URL
     * @param param  包含请求参数的Map，键值对均为字符串
     * @return       响应结果字符串，如果请求失败则抛出运行时异常
     */
    public static String sendPost(String url, Map<String, String> param) {
        // 用于存储响应结果
        String result = null;

        try {
            // 创建HTTP客户端实例
            HttpClient client = new HttpClient();
            // 创建POST方法实例并指定目标URL
            PostMethod post = new PostMethod(url);
            // 设置请求头信息，指定内容类型及字符编码
            post.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");

            // 参数封装逻辑
            if (param != null && !param.isEmpty()) {
                // 获取参数的键集合
                Set<String> keySet = param.keySet();
                // 创建迭代器遍历键集合
                Iterator<String> iterator = keySet.iterator();
                // 初始化NameValuePair数组以存放参数数据
                NameValuePair[] data = new NameValuePair[keySet.size()];
                int index = 0;

                // 遍历键值对并填充到NameValuePair数组中
                while (iterator.hasNext()) {
                    String key = iterator.next();
                    String value = param.get(key);
                    data[index++] = new NameValuePair(key, value);
                }

                // 将封装好的数据设置到请求体中
                post.setRequestBody(data);
            }

            // 执行POST请求并发送数据
            client.executeMethod(post);

            // 获取响应体并转换为字符串（确保使用UTF-8编码）
            result = new String(post.getResponseBodyAsString().getBytes("utf-8"));

            // 释放连接资源
            post.releaseConnection();
        } catch (Exception e) {
            // 捕获并打印异常信息
            e.printStackTrace();
            // 抛出运行时异常，提示网络请求失败
            throw new RuntimeException("网络请求失败[" + e.getMessage() + "]");
        }

        // 返回响应结果
        return result;
    }

}
